package com.zzj.ecology.system.mapper.system;

import com.zzj.ecology.system.bean.system.SysMenu;
import com.zzj.ecology.system.bean.system.SysMenuExample;
import com.zzj.ecology.system.bean.vo.dtree.DTree;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface SysMenuMapper {
    long countByExample(SysMenuExample example);

    int deleteByExample(SysMenuExample example);

    int deleteByPrimaryKey(Integer menuId);

    int insert(SysMenu record);

    int insertSelective(SysMenu record);

    List<SysMenu> selectByExample(SysMenuExample example);

    SysMenu selectByPrimaryKey(Integer menuId);

    int updateByExampleSelective(@Param("record") SysMenu record, @Param("example") SysMenuExample example);

    int updateByExample(@Param("record") SysMenu record, @Param("example") SysMenuExample example);

    int updateByPrimaryKeySelective(SysMenu record);

    int updateByPrimaryKey(SysMenu record);

    /**
     * 用户登录后, 获取到用户相应的菜单 菜单delete_status='0'(菜单存在)
     * @param username
     * @return
     */
    List<SysMenu> findOkTabMenuListByUsername2(String username);
    List<SysMenu> findOkTabMenuListByUsername(String username);

    /**
     * 指定一个上级菜单的ID 和 登录用户 username 查询拥有的 菜单 权限
     * @param parentId
     * @param username
     * @return
     */
    List<SysMenu> findOkTabMenuListByParentIdAndUsername(@Param("pid") Integer parentId, @Param("username") String username);

    /**
     * 查询带父集参数的分页数据
     * @param first
     * @param pageCounts
     * @return
     */
    List<SysMenu> findWithoutChildrenPageList(Integer first, Integer pageCounts);

    /**
     * 指定一个 上级菜单ID 查询 上级菜单详细信息
     * @param parentId
     * @return
     */
    SysMenu findWithoutChildrenById(Integer parentId);

    /**
     * 查询 所有 非按钮的 子集 树形 列表
     * @param menuId
     * @return
     */
    List<SysMenu> findNonButtonChildrensListByParentId(@Param("pid") Integer menuId);

    // 建立 菜单 与 权限的关联关系
    int insertMenuPermissionRelation(@Param("menuId") Integer menuId, @Param("permissionId") Integer permissionId);

    // 查询 Menu 与 Permission 的关联关系
    List<SysMenu> findMenuPermissionRelationByMenuId(Integer menuId);

    // 删除 Menu 与 Permission 的关联关系
    int deleteMenuPermissionRelationByMenuId(Integer menuId);

    // 根据 用户与菜单类型 查询所有按钮列表
    List<SysMenu> findUserMenuListByUsernameAndType(@Param("username") String username, @Param("type") String type);

    /**
     * 批量删除菜单数据 ,标记删除,即修改 delete_status = '0' 状态位改成 '1', 记录修改人和修改时间.
     * @param menuids
     * @param username
     * @param deleteStatus
     * @return
     */
    int updateDeleteStatusByIds(@Param("list") List<Integer> menuids, @Param("username") String username, @Param("deleteStatus") String deleteStatus);

    /**
     * 查询所有未标识删除的 菜单树,delete_status = '0'的状态,基础数据 id, pid 数据
     * @return
     */
    List<DTree> findDTreeList();

    /**
     * 查询 角色 与 菜单 的关联, 不管菜单是否删除, 只要 sys_role_menu 中存在关联即视为关联
     * @param roleId
     * @return
     */
    List<SysMenu> findRoleMenuRelationByRoleId(Integer roleId);

    /**
     * 根据 角色ID 删除与角色关联的菜单 只删除 sys_role_menu 中数据
     * @param roleId
     * @return
     */
    int deleteRoleMenuRelationByRoleId(Integer roleId);

    /**
     * 建立 角色 与 菜单 的关联关系, 只操作 sys_role_menu 中数据
     * @param roleId
     * @param menuids
     * @return
     */
    int insertRoleMenuRelation(@Param("rid") Integer roleId, @Param("ids") List<Integer> menuids);

    /**
     * 菜单管理页面中,展示用页面.查询到的是delete_status='0'(未删)数据的基础数据
     * @return
     */
    List<SysMenu> treeTable();
}